﻿package net.wangit;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import net.wangit.framework.config.DomainsSettings;
import net.wangit.framework.config.GlobalSettings;
import net.wangit.framework.i18n.LocaleUtil;
import net.wangit.user.Guest;
import net.wangit.util.Checker;


/**
 * 访问者对象，包含了User对象、客户端信息、个性化设置等。
 * 
 * @author watson Feb 24, 2010
 */
@SuppressWarnings("serial")
public class Visitor implements Serializable {

	private static final Guest GUEST = new Guest();
	private User user;
	private String language;
	private String country;
	private String localeString;
	private Map<String, String> skins;

	public Visitor() {
		skins = new HashMap<String, String>();
	}

	// 取得皮肤（样式文件）名称，未设置时取域配置的默认值。
	public String getSkin(String domain) {
		String skin = skins.get(domain);
		return skin != null ? skin : DomainsSettings.getSkin(domain);
	}

	// 设置皮肤（样式文件）名称。
	public void setSkin(String domain, String skin) {
		skins.put(domain, skin);
	}

	// 取得用户对象。
	public User getUser() {
		return ((User) (user != null ? user : GUEST));
	}

	// 设置用户对象（系统调用）。
	public void setUser(User user) {
		this.user = user;
	}

	// 取得语言编码，未设置时依据language和country组成语言编码。
	public String getLocaleString() {
		if (!Checker.isEmpty(localeString))
			return localeString;
		else
			return LocaleUtil.getLocaleString(language, country);
	}

	// 设置Locale对象的字符串表示方式，格式“language_country”。
	public void setLocaleString(String localeString) {
		this.localeString = localeString;
	}

	// 取得国家代码。
	public String getCountry() {
		return country != null ? country : GlobalSettings.getCountry();
	}

	// 设置国家代码。
	public void setCountry(String country) {
		this.country = country;
	}

	// 取得语言代码。
	public String getLanguage() {
		return Checker.isEmpty(language) ? GlobalSettings.getLanguage()
				: language;
	}

	// 设置语言代码。
	public void setLanguage(String language) {
		this.language = language;
	}

}
